import sys
from massa_dados.MassaDados import MassaDados
from banco.Banco import Banco

from PyQt4 import QtCore, QtGui

class Interface(QtGui.QDialog):

    #Mensagens de erro
    ERRO_BANCO          = QtCore.QT_TR_NOOP("Erro ao tentar inserir no banco de dados.")
    ERRO_CAMPO_VAZIO    = QtCore.QT_TR_NOOP("Campo obrigatorio vazio.")        
    ERRO_ARQUIVO_CSV    = QtCore.QT_TR_NOOP("Erro ao tentar abrir arquivo CSV.")
    ERRO_ARQUIVO_SQL    = QtCore.QT_TR_NOOP("Erro ao tentar criar arquivos SQL.")
    
    #Mensagens de sucessos    
    SUCESSO_ARQUIVO_CRIADO = QtCore.QT_TR_NOOP("Arquivo criado com sucesso.")
    SUCESSO_BANCO_INSERIDO = QtCore.QT_TR_NOOP("Registros inseridos com sucesso.")
    

    def abre_arquivo_csv(self):
        
        try:
            self.arquivoEntradaCSV = QtGui.QFileDialog.getOpenFileName(self, "Carga de Dados", self.lineEditArquivoCSV.text(), "Text Files (*.csv)")
            print self.arquivoEntradaCSV
            
            if not self.arquivoEntradaCSV.isEmpty():
                self.lineEditArquivoCSV.setText(self.arquivoEntradaCSV)        
        
        except Exception, e:
            
            QtGui.QMessageBox.information(self, self.tr("Erro"), self.ERRO_ARQUIVO_CSV)
            print "Erro ao abrir arquivos de dados"
            print e
    
    def insere_dados_banco(self):
        try:    
            host       = str(self.lineEditHost.text())
            usuario    = str(self.lineEditUsuario.text())
            senha      = str(self.lineEditSenha.text())
            nome       = str(self.lineEditBanco.text())
            tipo       = str(self.comboBoxBanco.itemText(self.comboBoxBanco.currentIndex()))
            registros  = str(self.lineEditRegistros.text())
            arquivoCSV = str(self.lineEditArquivoCSV.text())
            
            
            if host != "" and usuario != "" and  senha != "" and nome != "" and registros != "" and arquivoCSV != "":
                
                massa_dados = MassaDados(registros, arquivoCSV)
                
                banco = Banco()
                massa_dados.prepara_banco(banco, host, usuario, senha, nome, tipo)
                
                massa_dados.insere_massa_dados(self.checkBoxCriarTabelas.isChecked(), host, usuario, senha, nome, tipo)
                QtGui.QMessageBox.information(self, self.tr("Sucesso"), self.SUCESSO_BANCO_INSERIDO)
            
            else:
                QtGui.QMessageBox.information(self, self.tr("Erro"), self.ERRO_CAMPO_VAZIO)
        
        except Exception, e:
            QtGui.QMessageBox.information(self, self.tr("Erro"), self.ERRO_BANCO)
            print "Erro ao inserir dados no banco"
            print e
    
    def cria_arquivos_sql(self):
        
        #try:    
             
            registros  = str(self.lineEditRegistros.text())
            arquivoCSV = str(self.lineEditArquivoCSV.text())
            
            
            if registros != "" and arquivoCSV != "":
                massa_dados = MassaDados(registros, arquivoCSV)
                massa_dados.cria_arquivos_sql()
                QtGui.QMessageBox.information(self, self.tr("Sucesso"), self.SUCESSO_ARQUIVO_CRIADO)
                
            else:
                QtGui.QMessageBox.information(self, self.tr("Erro"), self.ERRO_CAMPO_VAZIO)
        
        #except Exception, e:
        #    QtGui.QMessageBox.information(self, self.tr("Erro"), self.ERRO_ARQUIVO_SQL)
        #    print "Erro ao criar arquivos SQL."
        #    print e
        

    def tela(self, CargaDados):
        
        CargaDados.setObjectName("CargaDados")
        CargaDados.resize(392, 484)
   
        self.groupBancoDados = QtGui.QGroupBox(CargaDados)
        self.groupBancoDados.setGeometry(QtCore.QRect(20, 170, 347, 213))
        self.groupBancoDados.setCheckable(True)
        self.groupBancoDados.setChecked(False)
        self.groupBancoDados.setObjectName("groupBancoDados")

        self.gridLayout = QtGui.QGridLayout(self.groupBancoDados)
        self.gridLayout.setObjectName("gridLayout")

        self.labelHost = QtGui.QLabel(self.groupBancoDados)
        self.labelHost.setObjectName("labelHost")
        self.gridLayout.addWidget(self.labelHost, 0, 0, 1, 1)

        spacerItem = QtGui.QSpacerItem(76, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem, 0, 1, 1, 1)

        self.lineEditHost = QtGui.QLineEdit(self.groupBancoDados)
        self.lineEditHost.setObjectName("lineEditHost")
        self.gridLayout.addWidget(self.lineEditHost, 0, 2, 1, 2)

        self.labelUsuario = QtGui.QLabel(self.groupBancoDados)
        self.labelUsuario.setObjectName("labelUsuario")
        self.gridLayout.addWidget(self.labelUsuario, 1, 0, 1, 1)

        spacerItem1 = QtGui.QSpacerItem(76, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem1, 1, 1, 1, 1)

        self.lineEditUsuario = QtGui.QLineEdit(self.groupBancoDados)
        self.lineEditUsuario.setEchoMode(QtGui.QLineEdit.Normal)
        self.lineEditUsuario.setObjectName("lineEditUsuario")
        self.gridLayout.addWidget(self.lineEditUsuario, 1, 2, 1, 2)

        self.labelSenha = QtGui.QLabel(self.groupBancoDados)
        self.labelSenha.setObjectName("labelSenha")
        self.gridLayout.addWidget(self.labelSenha, 2, 0, 1, 1)

        spacerItem2 = QtGui.QSpacerItem(76, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem2, 2, 1, 1, 1)

        self.lineEditSenha = QtGui.QLineEdit(self.groupBancoDados)
        self.lineEditSenha.setEchoMode(QtGui.QLineEdit.Password)
        self.lineEditSenha.setObjectName("lineEditSenha")
        self.gridLayout.addWidget(self.lineEditSenha, 2, 2, 1, 2)

        self.labelBanco = QtGui.QLabel(self.groupBancoDados)
        self.labelBanco.setObjectName("labelBanco")
        self.gridLayout.addWidget(self.labelBanco, 3, 0, 1, 1)

        spacerItem3 = QtGui.QSpacerItem(76, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem3, 3, 1, 1, 1)

        self.lineEditBanco = QtGui.QLineEdit(self.groupBancoDados)
        self.lineEditBanco.setObjectName("lineEditBanco")
        self.gridLayout.addWidget(self.lineEditBanco, 3, 2, 1, 2)

        self.labelTipoBanco = QtGui.QLabel(self.groupBancoDados)
        self.labelTipoBanco.setObjectName("labelTipoBanco")
        self.gridLayout.addWidget(self.labelTipoBanco, 4, 0, 1, 1)

        spacerItem4 = QtGui.QSpacerItem(30, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem4, 4, 1, 1, 1)

        self.comboBoxBanco = QtGui.QComboBox(self.groupBancoDados)
        self.comboBoxBanco.setObjectName("comboBoxBanco")
        self.comboBoxBanco.addItem(QtCore.QString())
        self.comboBoxBanco.addItem(QtCore.QString())

        self.gridLayout.addWidget(self.comboBoxBanco, 4, 2, 1, 2)

        self.checkBoxCriarTabelas = QtGui.QCheckBox(self.groupBancoDados)
        self.checkBoxCriarTabelas.setChecked(True)
        self.checkBoxCriarTabelas.setObjectName("checkBoxCriarTabelas")
        self.gridLayout.addWidget(self.checkBoxCriarTabelas, 5, 0, 1, 1)

        self.pushButtonCancelaBanco = QtGui.QPushButton(self.groupBancoDados)
        self.pushButtonCancelaBanco.setObjectName("pushButtonCancelaBanco")
        self.gridLayout.addWidget(self.pushButtonCancelaBanco, 5, 3, 1, 1)

        self.pushButtonInserirDados = QtGui.QPushButton(self.groupBancoDados)
        self.pushButtonInserirDados.setObjectName("pushButtonInserirDados")
        self.gridLayout.addWidget(self.pushButtonInserirDados, 5, 2, 1, 1)

        self.groupGeraArquivo = QtGui.QGroupBox(CargaDados)
        self.groupGeraArquivo.setGeometry(QtCore.QRect(20, 400, 351, 71))
        self.groupGeraArquivo.setCheckable(True)
        self.groupGeraArquivo.setChecked(False)
        self.groupGeraArquivo.setObjectName("groupGeraArquivo")

        self.gridLayoutArquivoSaida = QtGui.QGridLayout(self.groupGeraArquivo)
        self.gridLayoutArquivoSaida.setObjectName("gridLayoutArquivoSaida")

        self.pushButtonGeraArquivo = QtGui.QPushButton(self.groupGeraArquivo)
        self.pushButtonGeraArquivo.setObjectName("pushButtonGeraArquivo")
        self.gridLayoutArquivoSaida.addWidget(self.pushButtonGeraArquivo, 0, 0, 1, 1)

        self.pushButtonCancelaArquivo = QtGui.QPushButton(self.groupGeraArquivo)
        self.pushButtonCancelaArquivo.setObjectName("pushButtonCancelaArquivo")
        self.gridLayoutArquivoSaida.addWidget(self.pushButtonCancelaArquivo, 0, 1, 1, 1)

        self.groupDadosEntrada = QtGui.QGroupBox(CargaDados)
        self.groupDadosEntrada.setGeometry(QtCore.QRect(20, 20, 351, 131))
        self.groupDadosEntrada.setObjectName("groupDadosEntrada")

        self.gridLayoutDadosEntrada = QtGui.QGridLayout(self.groupDadosEntrada)
        self.gridLayoutDadosEntrada.setObjectName("gridLayoutDadosEntrada")

        self.labelRegistros = QtGui.QLabel(self.groupDadosEntrada)
        self.labelRegistros.setObjectName("labelRegistros")
        self.gridLayoutDadosEntrada.addWidget(self.labelRegistros, 0, 0, 1, 2)

        spacerItem5 = QtGui.QSpacerItem(86, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
        self.gridLayoutDadosEntrada.addItem(spacerItem5, 0, 2, 1, 2)

        self.lineEditRegistros = QtGui.QLineEdit(self.groupDadosEntrada)
        self.lineEditRegistros.setLayoutDirection(QtCore.Qt.RightToLeft)
        self.lineEditRegistros.setObjectName("lineEditRegistros")
        self.gridLayoutDadosEntrada.addWidget(self.lineEditRegistros, 0, 4, 1, 1)

        self.labelArquivo = QtGui.QLabel(self.groupDadosEntrada)
        self.labelArquivo.setObjectName("labelArquivo")
        self.gridLayoutDadosEntrada.addWidget(self.labelArquivo, 1, 0, 1, 1)

        self.lineEditArquivoCSV = QtGui.QLineEdit(self.groupDadosEntrada)
        self.lineEditArquivoCSV.setObjectName("lineEditArquivoCSV")
        self.gridLayoutDadosEntrada.addWidget(self.lineEditArquivoCSV, 1, 1, 1, 4)

        self.aviso = QtGui.QLabel(self.groupDadosEntrada)
        self.aviso.setObjectName("aviso")
        self.gridLayoutDadosEntrada.addWidget(self.aviso, 2, 0, 1, 2)

        spacerItem6 = QtGui.QSpacerItem(94, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
        self.gridLayoutDadosEntrada.addItem(spacerItem6, 2, 2, 1, 1)

        self.pushButtonProcurar = QtGui.QPushButton(self.groupDadosEntrada)
        self.pushButtonProcurar.setObjectName("pushButtonProcurar")
        self.gridLayoutDadosEntrada.addWidget(self.pushButtonProcurar, 2, 3, 1, 2)
        

        # Valores de teste        
        # self.lineEditRegistros.setText('100')
        # self.lineEditArquivoCSV.setText('/home/luigus/Desktop/exemplo.csv')
        # self.lineEditHost.setText('localhost')
        # self.lineEditUsuario.setText('luigus')
        # self.lineEditSenha.setText('mysql')
        # self.lineEditBanco.setText('teste')
        #-----------------------------------------------------------------------
        
        self.retranslateUi(CargaDados)

        QtCore.QMetaObject.connectSlotsByName(CargaDados)

        QtCore.QObject.connect(self.pushButtonCancelaBanco,   QtCore.SIGNAL("clicked()"), CargaDados.reject)
        QtCore.QObject.connect(self.pushButtonCancelaArquivo, QtCore.SIGNAL("clicked()"), CargaDados.reject)
        QtCore.QObject.connect(self.pushButtonGeraArquivo,    QtCore.SIGNAL("clicked()"), self.cria_arquivos_sql)
        QtCore.QObject.connect(self.pushButtonInserirDados,   QtCore.SIGNAL("clicked()"), self.insere_dados_banco)
        QtCore.QObject.connect(self.pushButtonProcurar,       QtCore.SIGNAL("clicked()"), self.abre_arquivo_csv)

        CargaDados.setTabOrder(self.lineEditRegistros, self.lineEditArquivoCSV)
        CargaDados.setTabOrder(self.lineEditArquivoCSV, self.pushButtonProcurar)
        CargaDados.setTabOrder(self.pushButtonProcurar, self.groupBancoDados)
        CargaDados.setTabOrder(self.groupBancoDados, self.lineEditHost)
        CargaDados.setTabOrder(self.lineEditHost, self.lineEditUsuario)
        CargaDados.setTabOrder(self.lineEditUsuario, self.lineEditSenha)
        CargaDados.setTabOrder(self.lineEditSenha, self.lineEditBanco)
        CargaDados.setTabOrder(self.lineEditBanco, self.comboBoxBanco)
        CargaDados.setTabOrder(self.comboBoxBanco, self.checkBoxCriarTabelas)
        CargaDados.setTabOrder(self.checkBoxCriarTabelas, self.pushButtonInserirDados)
        CargaDados.setTabOrder(self.pushButtonInserirDados, self.pushButtonCancelaBanco)
        CargaDados.setTabOrder(self.pushButtonCancelaBanco, self.groupGeraArquivo)
        CargaDados.setTabOrder(self.groupGeraArquivo, self.pushButtonGeraArquivo)
        CargaDados.setTabOrder(self.pushButtonGeraArquivo, self.pushButtonCancelaArquivo)

    def retranslateUi(self, CargaDados):

        CargaDados.setWindowTitle(QtGui.QApplication.translate("CargaDados", "Carga de Dados", None, QtGui.QApplication.UnicodeUTF8))

        self.groupBancoDados.setTitle(QtGui.QApplication.translate("CargaDados", "Inserir no banco de dados", None, QtGui.QApplication.UnicodeUTF8))
        self.labelHost.setText(QtGui.QApplication.translate("CargaDados", "Host *", None, QtGui.QApplication.UnicodeUTF8))
        self.labelUsuario.setText(QtGui.QApplication.translate("CargaDados", "Usuario *", None, QtGui.QApplication.UnicodeUTF8))
        self.labelSenha.setText(QtGui.QApplication.translate("CargaDados", "Senha *", None, QtGui.QApplication.UnicodeUTF8))
        self.labelBanco.setText(QtGui.QApplication.translate("CargaDados", "Nome do Banco *", None, QtGui.QApplication.UnicodeUTF8))
        self.labelTipoBanco.setText(QtGui.QApplication.translate("CargaDados", "Banco de Dados *", None, QtGui.QApplication.UnicodeUTF8))

        self.comboBoxBanco.setItemText(0, QtGui.QApplication.translate("CargaDados", "Mysql", None, QtGui.QApplication.UnicodeUTF8))
        self.comboBoxBanco.setItemText(1, QtGui.QApplication.translate("CargaDados", "Postgre", None, QtGui.QApplication.UnicodeUTF8))

        self.checkBoxCriarTabelas.setText(QtGui.QApplication.translate("CargaDados", "Criar tabelas", None, QtGui.QApplication.UnicodeUTF8))
        self.pushButtonCancelaBanco.setText(QtGui.QApplication.translate("CargaDados", "Cancelar", None, QtGui.QApplication.UnicodeUTF8))
        self.pushButtonInserirDados.setText(QtGui.QApplication.translate("CargaDados", "Inserir dados", None, QtGui.QApplication.UnicodeUTF8))

        self.groupGeraArquivo.setTitle(QtGui.QApplication.translate("CargaDados", "Gerar arquivo de saida (sql)", None, QtGui.QApplication.UnicodeUTF8))
        self.pushButtonGeraArquivo.setText(QtGui.QApplication.translate("CargaDados", "Gera arquivo", None, QtGui.QApplication.UnicodeUTF8))
        self.pushButtonCancelaArquivo.setText(QtGui.QApplication.translate("CargaDados", "Cancelar", None, QtGui.QApplication.UnicodeUTF8))

        self.groupDadosEntrada.setTitle(QtGui.QApplication.translate("CargaDados", "Dados de entrada", None, QtGui.QApplication.UnicodeUTF8))
        self.labelRegistros.setText(QtGui.QApplication.translate("CargaDados", "Numero de registros *", None, QtGui.QApplication.UnicodeUTF8))
        self.labelArquivo.setText(QtGui.QApplication.translate("CargaDados", "Arquivo CSV *", None, QtGui.QApplication.UnicodeUTF8))
        self.aviso.setText(QtGui.QApplication.translate("CargaDados", "Campos obrigatorios (*)", None, QtGui.QApplication.UnicodeUTF8))
        self.pushButtonProcurar.setText(QtGui.QApplication.translate("CargaDados", "Procurar", None, QtGui.QApplication.UnicodeUTF8))


if __name__ == "__main__":
    
    app = QtGui.QApplication(sys.argv)
    CargaDados = QtGui.QDialog()
    
    ui = Interface()
    ui.tela(CargaDados)
    
    CargaDados.show()
    sys.exit(app.exec_())
